package com.example.myanimation;

import android.animation.ArgbEvaluator;
import android.animation.ObjectAnimator;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Spinner;

import butterknife.BindView;
import butterknife.ButterKnife;

/**
 * Created by zy on 2017/5/26.
 */

public class ObjectActivity extends AppCompatActivity {

    @BindView(R.id.spinner)
    Spinner spinner;
    @BindView(R.id.bt)
    Button bt;
    @BindView(R.id.object_pointview)
    MyObjectPointView objectPointview;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_object);
        ButterKnife.bind(this);
        initEvent();
    }

    private void initEvent() {

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                switch (position) {
                    case 1:
                        AlphaAnimation();
                        break;
                    case 2:
                        RotationAnimation();
                        break;
                    case 3:
                        MyObjectAnimator();
                        break;
                    case 4:
                        argbAnimator();
                        break;
                    case 5:
                        break;
                    case 6:
                        break;
                    case 7:
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }

        });
    }

    private void argbAnimator() {
        ObjectAnimator animator = ObjectAnimator.ofInt(bt, "BackgroundColor", 0xffff00ff, 0xffffff00, 0xffff00ff);
        animator.setDuration(8000);
        animator.setEvaluator(new ArgbEvaluator());
        animator.start();
    }

    private void MyObjectAnimator() {
        ObjectAnimator objectAnimator = ObjectAnimator.ofInt(objectPointview, "PointRadius", 20, 50, 100,20);
        objectAnimator.setDuration(3000);
        objectAnimator.start();
    }

    private void RotationAnimation() {
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(bt, "rotationY", 0, 180, 0);
        objectAnimator.setDuration(3000);
        objectAnimator.start();
    }

    private void AlphaAnimation() {
        /**
         * public static ObjectAnimator ofFloat(Object target, String propertyName, float... values)
         *
         *  第一个参数用于指定这个动画要操作的是哪个控件
         第二个参数用于指定这个动画要操作这个控件的哪个属性
         第三个参数是可变长参数，这个就跟ValueAnimator中的可变长参数的意义一样了，就是指这个属性值是从哪变到哪。
         像我们上面的代码中指定的就是将textview的alpha属性从0变到1再变到0.5；
         *
         *
         * bt并没有alpha属行。那么他是如何变化的呢。其实objectAnimator做动画不是根据xml来的。
         * 而是通过属性所进行的set函数来做动画的。比如alpha，再view中有setAlpha函数。下面是view中的
         * set函数
         *
         * 1、透明度：对应的alpha
         public void setAlpha(float alpha)

         //2、旋转度数：对应的rotation、rotationX、rotationY
         public void setRotation(float rotation)   表示围绕X轴旋转，rotationX表示旋转度数
         public void setRotationX(float rotationX) 表示围绕Y轴旋转，rotationY表示旋转度数
         public void setRotationY(float rotationY) 表示围绕Z旋转,rotation表示旋转度数


         //3、平移：对应的translationX、translationY  每次移动距离的计算都是以原点为中心的
         public void setTranslationX(float translationX) 表示在X轴上的平移距离,以当前控件为原点，向右为正方向，参数translationX表示移动的距离。
         public void setTranslationY(float translationY) 表示在Y轴上的平移距离，以当前控件为原点，向下为正方向，参数translationY表示移动的距离。


         //缩放：对应的scaleX、scaleY
         public void setScaleX(float scaleX)  在X轴上缩放，scaleX表示缩放倍数
         public void setScaleY(float scaleY)  在Y轴上缩放，scaleY表示缩放倍数
         *
         */
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(bt, "alpha", 0, 1, 0.5f);
        objectAnimator.setDuration(3000);
        objectAnimator.start();
    }

}
